// Copyright (C) 1953-2020 NUDT
// Verilog module name - time_division_multiplexing 
// Version:TDM_V1.0
// Created:
//         by - fenglin 
//         at - 05.2022
////////////////////////////////////////////////////////////////////////////
// Description:
//         time division multiplexing for receive md come from network port and host port
///////////////////////////////////////////////////////////////////////////

`timescale 1ns/1ps

module time_division_multiplexing(
        i_clk,
        i_rst_n,
               
        iv_md_p0,
        i_md_wr_p0,
        o_md_ack_p0,
        
        iv_md_p1,
        i_md_wr_p1,
        o_md_ack_p1,
        
        iv_md_p2,
        i_md_wr_p2,
        o_md_ack_p2,
        
        iv_md_p3,
        i_md_wr_p3,
        o_md_ack_p3,
        
        iv_md_p4,
        i_md_wr_p4,
        o_md_ack_p4,    
        
        iv_md_p5,
        i_md_wr_p5,
        o_md_ack_p5,    
        
        iv_md_p6,
        i_md_wr_p6,
        o_md_ack_p6,    
        
        iv_md_p7,
        i_md_wr_p7,
        o_md_ack_p7,    
        
        iv_md_p8,
        i_md_wr_p8,
        o_md_ack_p8,    
        
        iv_md_p9,
        i_md_wr_p9,
        o_md_ack_p9,    
        
        iv_md_p10,
        i_md_wr_p10,
        o_md_ack_p10,    
        
        iv_md_p11,
        i_md_wr_p11,
        o_md_ack_p11,    
        
        iv_md_p12,
        i_md_wr_p12,
        o_md_ack_p12,    
        
        iv_md_p13,
        i_md_wr_p13,
        o_md_ack_p13,    
        
        iv_md_p14,
        i_md_wr_p14,
        o_md_ack_p14,    
        
        iv_md_p15,
        i_md_wr_p15,
        o_md_ack_p15,    
        
        iv_md_p16,
        i_md_wr_p16,
        o_md_ack_p16,    
        
        iv_md_p17,
        i_md_wr_p17,
        o_md_ack_p17,    
        
        iv_md_p18,
        i_md_wr_p18,
        o_md_ack_p18,    
        
        iv_md_p19,
        i_md_wr_p19,
        o_md_ack_p19,    
        
        iv_md_p20,
        i_md_wr_p20,
        o_md_ack_p20,    
        
        iv_md_p21,
        i_md_wr_p21,
        o_md_ack_p21,    
        
        iv_md_p22,
        i_md_wr_p22,
        o_md_ack_p22,    
        
        iv_md_p23,
        i_md_wr_p23,
        o_md_ack_p23,    
        
        iv_md_p24,
        i_md_wr_p24,
        o_md_ack_p24,    
        
        iv_md_p25,
        i_md_wr_p25,
        o_md_ack_p25,    
        
        iv_md_p26,
        i_md_wr_p26,
        o_md_ack_p26,    
        
        iv_md_p27,
        i_md_wr_p27,
        o_md_ack_p27,    
        
        iv_md_p28,
        i_md_wr_p28,
        o_md_ack_p28,    
        
        iv_md_p29,
        i_md_wr_p29,
        o_md_ack_p29,    
        
        iv_md_p30,
        i_md_wr_p30,
        o_md_ack_p30,    
        
        iv_md_p31,
        i_md_wr_p31,
        o_md_ack_p31,            
        
        iv_md_p32,
        i_md_wr_p32,
        o_md_ack_p32, 
       
        ov_md,
        o_md_wr,
       
        ov_tdm_state
);

// I/O
// clk & rst
input                  i_clk;                   //125Mhz
input                  i_rst_n;
// md from p0
input      [299:0]     iv_md_p0;
input                  i_md_wr_p0;
output reg             o_md_ack_p0;
// md from p1      
input      [299:0]     iv_md_p1;
input                  i_md_wr_p1;
output reg             o_md_ack_p1;
// md from p2      
input      [299:0]     iv_md_p2;
input                  i_md_wr_p2;
output reg             o_md_ack_p2;
// md from p3      
input      [299:0]     iv_md_p3;
input                  i_md_wr_p3;
output reg             o_md_ack_p3;
// md from p4      
input      [299:0]     iv_md_p4;
input                  i_md_wr_p4;
output reg             o_md_ack_p4;    

input      [299:0]     iv_md_p5;
input                  i_md_wr_p5;
output reg             o_md_ack_p5;    

input      [299:0]     iv_md_p6;
input                  i_md_wr_p6;
output reg             o_md_ack_p6;    

input      [299:0]     iv_md_p7;
input                  i_md_wr_p7;
output reg             o_md_ack_p7;    

input      [299:0]     iv_md_p8;
input                  i_md_wr_p8;
output reg             o_md_ack_p8;    

input      [299:0]     iv_md_p9;
input                  i_md_wr_p9;
output reg             o_md_ack_p9;    

input      [299:0]     iv_md_p10;
input                  i_md_wr_p10;
output reg             o_md_ack_p10;    

input      [299:0]     iv_md_p11;
input                  i_md_wr_p11;
output reg             o_md_ack_p11;    

input      [299:0]     iv_md_p12;
input                  i_md_wr_p12;
output reg             o_md_ack_p12;    

input      [299:0]     iv_md_p13;
input                  i_md_wr_p13;
output reg             o_md_ack_p13;    

input      [299:0]     iv_md_p14;
input                  i_md_wr_p14;
output reg             o_md_ack_p14;    

input      [299:0]     iv_md_p15;
input                  i_md_wr_p15;
output reg             o_md_ack_p15;    

input      [299:0]     iv_md_p16;
input                  i_md_wr_p16;
output reg             o_md_ack_p16;    

input      [299:0]     iv_md_p17;
input                  i_md_wr_p17;
output reg             o_md_ack_p17;    

input      [299:0]     iv_md_p18;
input                  i_md_wr_p18;
output reg             o_md_ack_p18;    

input      [299:0]     iv_md_p19;
input                  i_md_wr_p19;
output reg             o_md_ack_p19;    

input      [299:0]     iv_md_p20;
input                  i_md_wr_p20;
output reg             o_md_ack_p20;    

input      [299:0]     iv_md_p21;
input                  i_md_wr_p21;
output reg             o_md_ack_p21;    

input      [299:0]     iv_md_p22;
input                  i_md_wr_p22;
output reg             o_md_ack_p22;    

input      [299:0]     iv_md_p23;
input                  i_md_wr_p23;
output reg             o_md_ack_p23;    

input      [299:0]     iv_md_p24;
input                  i_md_wr_p24;
output reg             o_md_ack_p24;    

input      [299:0]     iv_md_p25;
input                  i_md_wr_p25;
output reg             o_md_ack_p25;    

input      [299:0]     iv_md_p26;
input                  i_md_wr_p26;
output reg             o_md_ack_p26;    

input      [299:0]     iv_md_p27;
input                  i_md_wr_p27;
output reg             o_md_ack_p27;    

input      [299:0]     iv_md_p28;
input                  i_md_wr_p28;
output reg             o_md_ack_p28;    

input      [299:0]     iv_md_p29;
input                  i_md_wr_p29;
output reg             o_md_ack_p29;    

input      [299:0]     iv_md_p30;
input                  i_md_wr_p30;
output reg             o_md_ack_p30;    

input      [299:0]     iv_md_p31;
input                  i_md_wr_p31;
output reg             o_md_ack_p31;            

input      [299:0]     iv_md_p32;
input                  i_md_wr_p32;
output reg             o_md_ack_p32;
// md to lookup_table   
output reg [299:0]     ov_md;
output reg             o_md_wr;

output reg [6:0]       ov_tdm_state;
//////////////////////////////////////////////////
//                  state                       //
//////////////////////////////////////////////////
// allocate slots for each interface
// process the corresponding interface in the slot
localparam  ch0_s        = 7'd0,
            ch1_s        = 7'd1,
            ch2_s        = 7'd2,
            ch3_s        = 7'd3,
            ch4_s        = 7'd4,
            ch5_s        = 7'd5,
            ch6_s        = 7'd6,
            ch7_s        = 7'd7,
            ch8_s        = 7'd8,
            ch9_s        = 7'd9,
            ch10_s       = 7'd10,
            ch11_s       = 7'd11,
            ch12_s       = 7'd12,
            ch13_s       = 7'd13,
            ch14_s       = 7'd14,
            ch15_s       = 7'd15,
            
            ch16_10gr1_s = 7'd16,
            ch17_10gr1_s = 7'd17,
            ch18_10gr1_s = 7'd18,
            ch19_10gr1_s = 7'd19,
            
            ch16_10gr2_s = 7'd20,
            ch17_10gr2_s = 7'd21,
            ch18_10gr2_s = 7'd22,
            ch19_10gr2_s = 7'd23,

            ch16_10gr3_s = 7'd24,
            ch17_10gr3_s = 7'd25,
            ch18_10gr3_s = 7'd26,
            ch19_10gr3_s = 7'd27,

            ch16_10gr4_s = 7'd28,
            ch17_10gr4_s = 7'd29,
            ch18_10gr4_s = 7'd30,
            ch19_10gr4_s = 7'd31,

            ch16_10gr5_s = 7'd32,
            ch17_10gr5_s = 7'd33,
            ch18_10gr5_s = 7'd34,
            ch19_10gr5_s = 7'd35, 

            ch16_10gr6_s = 7'd36,
            ch17_10gr6_s = 7'd37,
            ch18_10gr6_s = 7'd38,
            ch19_10gr6_s = 7'd39,

            ch16_10gr7_s = 7'd40,
            ch17_10gr7_s = 7'd41,
            ch18_10gr7_s = 7'd42,
            ch19_10gr7_s = 7'd43,
                             
            ch16_10gr8_s = 7'd44,
            ch17_10gr8_s = 7'd45,
            ch18_10gr8_s = 7'd46,
            ch19_10gr8_s = 7'd47,
                            
            ch16_10gr9_s = 7'd48,
            ch17_10gr9_s = 7'd49,
            ch18_10gr9_s = 7'd50,
            ch19_10gr9_s = 7'd51,
                           
            ch16_10gr10_s = 7'd52,
            ch17_10gr10_s = 7'd53,
            ch18_10gr10_s = 7'd54,
            ch19_10gr10_s = 7'd55,
            
            ch20_s        = 7'd56;                      
always @(posedge i_clk or negedge i_rst_n) begin
    if(i_rst_n == 1'b0)begin
        ov_md               <= 300'h0;
        o_md_wr             <= 1'h0;
        o_md_ack_p0         <= 1'h0;
        o_md_ack_p1         <= 1'h0;
        o_md_ack_p2         <= 1'h0;
        o_md_ack_p3         <= 1'h0;
        o_md_ack_p4         <= 1'h0;
        o_md_ack_p5         <= 1'h0;
        o_md_ack_p6         <= 1'h0;
        o_md_ack_p7         <= 1'h0;    
        o_md_ack_p8         <= 1'h0;
        o_md_ack_p9         <= 1'h0;
        o_md_ack_p10        <= 1'h0;
        o_md_ack_p11        <= 1'h0;
        o_md_ack_p12        <= 1'h0;
        o_md_ack_p13        <= 1'h0;
        o_md_ack_p14        <= 1'h0;
        o_md_ack_p15        <= 1'h0;
        o_md_ack_p16        <= 1'h0;
        o_md_ack_p17        <= 1'h0;
        o_md_ack_p18        <= 1'h0;
        o_md_ack_p19        <= 1'h0;
        o_md_ack_p20        <= 1'h0;
        o_md_ack_p21        <= 1'h0;
        o_md_ack_p22        <= 1'h0;
        o_md_ack_p23        <= 1'h0;
        o_md_ack_p24        <= 1'h0;
        o_md_ack_p25        <= 1'h0;
        o_md_ack_p26        <= 1'h0;
        o_md_ack_p27        <= 1'h0;
        o_md_ack_p28        <= 1'h0;
        o_md_ack_p29        <= 1'h0;
        o_md_ack_p30        <= 1'h0;
        o_md_ack_p31        <= 1'h0;
        o_md_ack_p32        <= 1'h0;        

        ov_tdm_state        <= ch16_10gr1_s;
    end
    else begin
        case(ov_tdm_state)
            ch16_10gr1_s:begin//slot16 for port16
                o_md_ack_p0         <= 1'h0;
                o_md_ack_p1         <= 1'h0;
                o_md_ack_p2         <= 1'h0;
                o_md_ack_p3         <= 1'h0;
                o_md_ack_p4         <= 1'h0;
                o_md_ack_p5         <= 1'h0;
                o_md_ack_p6         <= 1'h0;
                o_md_ack_p7         <= 1'h0;
                o_md_ack_p8         <= 1'h0;
                o_md_ack_p9         <= 1'h0;
                o_md_ack_p10        <= 1'h0;
                o_md_ack_p11        <= 1'h0;
                o_md_ack_p12        <= 1'h0;
                o_md_ack_p13        <= 1'h0;
                o_md_ack_p14        <= 1'h0;
                o_md_ack_p15        <= 1'h0;
                //o_md_ack_p16        <= 1'h0;
                o_md_ack_p17        <= 1'h0;
                o_md_ack_p18        <= 1'h0;
                o_md_ack_p19        <= 1'h0;
                o_md_ack_p20        <= 1'h0;
                o_md_ack_p21        <= 1'h0;
                o_md_ack_p22        <= 1'h0;
                o_md_ack_p23        <= 1'h0;
                o_md_ack_p24        <= 1'h0;
                o_md_ack_p25        <= 1'h0;
                o_md_ack_p26        <= 1'h0;
                o_md_ack_p27        <= 1'h0;
                o_md_ack_p28        <= 1'h0;
                o_md_ack_p29        <= 1'h0;
                o_md_ack_p30        <= 1'h0;
                o_md_ack_p31        <= 1'h0;
                o_md_ack_p32        <= 1'h0; 
                
                ov_tdm_state        <= ch17_10gr1_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end 
            end
            
            ch17_10gr1_s:begin//slot17 for port17
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr1_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr1_s:begin//slot18 for port18
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr1_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr1_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch0_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <=300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch0_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch1_s;
                if(i_md_wr_p0 == 1'b1)begin
                    ov_md           <= iv_md_p0;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p0     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p0     <= 1'h0;
                end
            end
            
            ch1_s:begin  
                o_md_ack_p0         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr2_s;
                if(i_md_wr_p1 == 1'b1)begin
                    ov_md           <= iv_md_p1;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p1     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p1     <= 1'h0;
                end
            end

            ch16_10gr2_s:begin 
                o_md_ack_p1         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr2_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr2_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr2_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr2_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr2_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr2_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch2_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <=300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch2_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch3_s;
                if(i_md_wr_p2 == 1'b1)begin
                    ov_md           <= iv_md_p2;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p2     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p2     <= 1'h0;
                end
            end
            
            ch3_s:begin  
                o_md_ack_p2         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr3_s;
                if(i_md_wr_p3 == 1'b1)begin
                    ov_md           <= iv_md_p3;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p3     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p3     <= 1'h0;
                end
            end

            ch16_10gr3_s:begin 
                o_md_ack_p3         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr3_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr3_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr3_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr3_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr3_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr3_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch4_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch4_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch5_s;
                if(i_md_wr_p4 == 1'b1)begin
                    ov_md           <= iv_md_p4;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p4     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p4     <= 1'h0;
                end
            end
            
            ch5_s:begin  
                o_md_ack_p4         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr4_s;
                if(i_md_wr_p5 == 1'b1)begin
                    ov_md           <= iv_md_p5;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p5     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p5     <= 1'h0;
                end
            end

            ch16_10gr4_s:begin 
                o_md_ack_p5         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr4_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr4_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr4_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr4_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr4_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr4_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch6_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch6_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch7_s;
                if(i_md_wr_p6 == 1'b1)begin
                    ov_md           <= iv_md_p6;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p6     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p6     <= 1'h0;
                end
            end
            
            ch7_s:begin  
                o_md_ack_p6         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr5_s;
                if(i_md_wr_p7 == 1'b1)begin
                    ov_md           <= iv_md_p7;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p7     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p7     <= 1'h0;
                end
            end

            ch16_10gr5_s:begin 
                o_md_ack_p7         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr5_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr5_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr5_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr5_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr5_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr5_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch8_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch8_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch9_s;
                if(i_md_wr_p8 == 1'b1)begin
                    ov_md           <= iv_md_p8;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p8     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p8     <= 1'h0;
                end
            end
            
            ch9_s:begin  
                o_md_ack_p8         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr6_s;
                if(i_md_wr_p9 == 1'b1)begin
                    ov_md           <= iv_md_p9;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p9     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p9     <= 1'h0;
                end
            end

            ch16_10gr6_s:begin 
                o_md_ack_p9         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr6_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr6_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr6_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr6_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr6_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr6_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch10_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch10_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch11_s;
                if(i_md_wr_p10 == 1'b1)begin
                    ov_md           <= iv_md_p10;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p10     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p10     <= 1'h0;
                end
            end
            
            ch11_s:begin  
                o_md_ack_p10         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr7_s;
                if(i_md_wr_p11 == 1'b1)begin
                    ov_md           <= iv_md_p11;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p11     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p11     <= 1'h0;
                end
            end

            ch16_10gr7_s:begin 
                o_md_ack_p11         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr7_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr7_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr7_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr7_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr7_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr7_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch12_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch12_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch13_s;
                if(i_md_wr_p12 == 1'b1)begin
                    ov_md           <= iv_md_p12;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p12     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p12     <= 1'h0;
                end
            end
            
            ch13_s:begin  
                o_md_ack_p12         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr8_s;
                if(i_md_wr_p13 == 1'b1)begin
                    ov_md           <= iv_md_p13;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p13     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p13     <= 1'h0;
                end
            end

            ch16_10gr8_s:begin 
                o_md_ack_p13         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr8_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr8_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr8_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr8_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr8_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr8_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch14_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch14_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch15_s;
                if(i_md_wr_p14 == 1'b1)begin
                    ov_md           <= iv_md_p14;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p14     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p14     <= 1'h0;
                end
            end
            
            ch15_s:begin  
                o_md_ack_p14         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr9_s;
                if(i_md_wr_p15 == 1'b1)begin
                    ov_md           <= iv_md_p15;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p15     <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p15     <= 1'h0;
                end
            end

            ch16_10gr9_s:begin 
                o_md_ack_p15         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr9_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr9_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr9_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr9_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr9_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr9_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr10_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end
            
            ch16_10gr10_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch17_10gr10_s;
                if(i_md_wr_p16 == 1'b1)begin
                    ov_md           <= iv_md_p16;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p16    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p16    <= 1'h0;
                end
            end
            
            ch17_10gr10_s:begin 
                o_md_ack_p16         <= 1'h0;
                
                ov_tdm_state        <= ch18_10gr10_s;
                if(i_md_wr_p17 == 1'b1)begin
                    ov_md           <= iv_md_p17;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p17    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p17    <= 1'h0;
                end
            end
            
            ch18_10gr10_s:begin 
                o_md_ack_p17         <= 1'h0;
                
                ov_tdm_state        <= ch19_10gr10_s;
                if(i_md_wr_p18 == 1'b1)begin
                    ov_md           <= iv_md_p18;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p18    <= 1'h1;
                end     
                else begin      
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p18    <= 1'h0;
                end
            end
            
            ch19_10gr10_s:begin 
                o_md_ack_p18         <= 1'h0;
                
                ov_tdm_state        <= ch20_s;
                if(i_md_wr_p19 == 1'b1)begin
                    ov_md           <= iv_md_p19;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p19     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p19     <= 1'h0;
                end
            end

            ch20_s:begin 
                o_md_ack_p19         <= 1'h0;
                
                ov_tdm_state        <= ch16_10gr1_s;
                if(i_md_wr_p20 == 1'b1)begin
                    ov_md           <= iv_md_p20;
                    o_md_wr         <= 1'h1;
                    o_md_ack_p20     <= 1'h1;
                end                 
                else begin          
                    ov_md           <= 300'h0;
                    o_md_wr         <= 1'h0;
                    o_md_ack_p20     <= 1'h0;
                end
            end               
            
            default:begin
                ov_md               <= 300'h0;
                o_md_wr             <= 1'h0;
                o_md_ack_p0         <= 1'h0;
                o_md_ack_p1         <= 1'h0;
                o_md_ack_p2         <= 1'h0;
                o_md_ack_p3         <= 1'h0;
                o_md_ack_p4         <= 1'h0;
                o_md_ack_p5         <= 1'h0;
                o_md_ack_p6         <= 1'h0;
                o_md_ack_p7         <= 1'h0;                
                o_md_ack_p8         <= 1'h0;
                o_md_ack_p9         <= 1'h0;
                o_md_ack_p10        <= 1'h0;
                o_md_ack_p11        <= 1'h0;
                o_md_ack_p12        <= 1'h0;
                o_md_ack_p13        <= 1'h0;
                o_md_ack_p14        <= 1'h0;
                o_md_ack_p15        <= 1'h0;
                o_md_ack_p16        <= 1'h0;
                o_md_ack_p17        <= 1'h0;
                o_md_ack_p18        <= 1'h0;
                o_md_ack_p19        <= 1'h0;
                o_md_ack_p20        <= 1'h0;
                o_md_ack_p21        <= 1'h0;
                o_md_ack_p22        <= 1'h0;
                o_md_ack_p23        <= 1'h0;
                o_md_ack_p24        <= 1'h0;
                o_md_ack_p25        <= 1'h0;
                o_md_ack_p26        <= 1'h0;
                o_md_ack_p27        <= 1'h0;
                o_md_ack_p28        <= 1'h0;
                o_md_ack_p29        <= 1'h0;
                o_md_ack_p30        <= 1'h0;
                o_md_ack_p31        <= 1'h0;
                o_md_ack_p32        <= 1'h0; 
            
                ov_tdm_state        <= ch16_10gr1_s;
            end
        endcase
    end
end
endmodule